"""
用户面板组件，显示用户互动和用户进入信息
"""
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QGroupBox, QTableWidget, QTableWidgetItem, QHeaderView
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QBrush, QColor

class UserPanel(QWidget):
    """
    用户面板组件，显示用户互动和用户进入信息
    """
    
    # 定义信号
    ai_analyze_requested = pyqtSignal(dict)  # AI分析请求信号
    
    def __init__(self, parent=None):
        """
        初始化用户面板
        """
        super().__init__(parent)
        self._connected = False
        self._init_ui()
    
    def _init_ui(self):
        """
        初始化UI
        """
        # 创建主布局
        self.layout = QVBoxLayout(self)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setSpacing(5)
        
        # 创建用户互动区域
        self._create_interaction_area()
        
        # 创建用户进入区域
        self._create_join_area()
        
        # 设置面板宽度
        self.setMinimumWidth(200)
        self.setMaximumWidth(300)
    
    def _create_interaction_area(self):
        """
        创建用户互动区域
        """
        # 用户互动区域
        interaction_group = QGroupBox("用户互动")
        interaction_layout = QVBoxLayout(interaction_group)
        
        # 创建用户互动表格
        self.interaction_table = QTableWidget(0, 2)
        self.interaction_table.setHorizontalHeaderLabels(["用户名", "互动内容"])
        self.interaction_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents)
        self.interaction_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch)
        self.interaction_table.verticalHeader().setVisible(False)
        # 设置表格为只读模式
        self.interaction_table.setEditTriggers(QTableWidget.NoEditTriggers)
        # 设置行高
        self.interaction_table.verticalHeader().setDefaultSectionSize(28)
        # 设置文本省略模式
        self.interaction_table.setWordWrap(False)  # 禁止自动换行
        self.interaction_table.setTextElideMode(Qt.ElideRight)  # 使用省略号
        # 设置工具提示显示时间
        self.interaction_table.setMouseTracking(True)  # 启用鼠标跟踪
        
        # 设置右键菜单
        self.interaction_table.setContextMenuPolicy(Qt.CustomContextMenu)
        self.interaction_table.customContextMenuRequested.connect(self._show_interaction_context_menu)
        
        interaction_layout.addWidget(self.interaction_table)
        
        self.layout.addWidget(interaction_group, 2)  # 2是伸展因子
    
    def _create_join_area(self):
        """
        创建用户进入区域
        """
        # 用户进入区域
        join_group = QGroupBox("用户进入")
        join_layout = QVBoxLayout(join_group)
        
        # 创建用户进入表格
        self.join_table = QTableWidget(0, 2)
        self.join_table.setHorizontalHeaderLabels(["用户名", "进入次数"])
        self.join_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)
        self.join_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeToContents)
        self.join_table.verticalHeader().setVisible(False)
        # 设置表格为只读模式
        self.join_table.setEditTriggers(QTableWidget.NoEditTriggers)
        # 设置行高
        self.join_table.verticalHeader().setDefaultSectionSize(28)
        # 设置文本省略模式
        self.join_table.setWordWrap(False)  # 禁止自动换行
        self.join_table.setTextElideMode(Qt.ElideRight)  # 使用省略号
        # 设置工具提示显示时间
        self.join_table.setMouseTracking(True)  # 启用鼠标跟踪
        join_layout.addWidget(self.join_table)
        
        self.layout.addWidget(join_group, 1)  # 1是伸展因子
    
    def add_interaction(self, username, content, is_gift=False):
        """
        添加用户互动（倒序排列，最新的在最上方）
        
        @param username: 用户名
        @param content: 互动内容
        @param is_gift: 是否为礼物消息
        """
        # 在第0行插入新行（倒序排列）
        self.interaction_table.insertRow(0)
        
        # 创建用户名项
        if is_gift:
            # 如果是礼物消息，用户名列显示"礼物"
            username_item = QTableWidgetItem("礼物")
        else:
            username_item = QTableWidgetItem(username)
            
        username_item.setToolTip(username)  # 添加悬浮提示（仍然保留原始用户名作为提示）
        self.interaction_table.setItem(0, 0, username_item)
        
        # 创建内容项，对过长内容进行省略
        content_item = QTableWidgetItem(content)
        content_item.setToolTip(content)  # 添加悬浮提示
        content_item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter)
        self.interaction_table.setItem(0, 1, content_item)
        
        # 如果是礼物消息，设置淡黄色背景
        if is_gift:
            # 设置淡黄色背景 (255, 250, 205) - LemonChiffon
            gift_brush = QBrush(QColor(255, 250, 205))
            username_item.setBackground(gift_brush)
            content_item.setBackground(gift_brush)
        
        # 限制表格最大行数，防止过多数据
        max_rows = 100
        if self.interaction_table.rowCount() > max_rows:
            self.interaction_table.removeRow(max_rows)
    
    def add_user_join(self, username, count):
        """
        添加用户进入（倒序排列，最新的在最上方）
        """
        # 在第0行插入新行（倒序排列）
        self.join_table.insertRow(0)
        
        # 创建用户名项
        username_item = QTableWidgetItem(username)
        username_item.setToolTip(username)  # 添加悬浮提示
        self.join_table.setItem(0, 0, username_item)
        
        # 创建计数项
        count_item = QTableWidgetItem(str(count))
        count_item.setToolTip(str(count))  # 添加悬浮提示
        self.join_table.setItem(0, 1, count_item)
        
        # 限制表格最大行数，防止过多数据
        max_rows = 100
        if self.join_table.rowCount() > max_rows:
            self.join_table.removeRow(max_rows)

    @pyqtSlot(bool)
    def on_connection_changed(self, connected):
        """
        处理连接状态变化
        
        @param connected: 连接状态
        """
        self._connected = connected
        
        # 移除对状态标签的引用和更新 

    def _show_interaction_context_menu(self, position):
        """
        显示用户互动表格的右键菜单
        
        @param position: 鼠标位置
        """
        from PyQt5.QtWidgets import QMenu, QAction
        
        # 获取当前选中的行
        row = self.interaction_table.rowAt(position.y())
        if row < 0:
            return
            
        # 创建右键菜单
        menu = QMenu(self)
        
        # 添加AI分析菜单项
        analyze_action = QAction("AI分析", self)
        analyze_action.triggered.connect(lambda: self._request_ai_analyze(row))
        menu.addAction(analyze_action)
        
        # 显示菜单
        menu.exec_(self.interaction_table.viewport().mapToGlobal(position))
        
    def _request_ai_analyze(self, row):
        """
        请求AI分析
        
        @param row: 表格行索引
        """
        # 获取用户名和内容
        username = self.interaction_table.item(row, 0).text()
        content = self.interaction_table.item(row, 1).text()
        
        # 创建分析数据
        data = {
            "user_name": username,
            "content": content,
            "platform": "直播间"
        }
        
        # 发送AI分析请求信号
        self.ai_analyze_requested.emit(data) 